"""
在项目的工具库中创建一个新的py文件
在这个py文件中  定义自己的请求类 在功能程序(bqg_reptile.py)中可以继承此类 来拥有类中的所有方法  这叫做公共类的抽离  重复代码的抽取
"""
import requests

from xunter_utils.work_utils import work_logger


# 定义一个客户端  可以发送请求 GET和POSt

class ChromeClient:
    # 增加会话属性 保存requests请求对象 接下来的请求都在会话中进行 并且将请求需要的一些反反爬参数设置
    session = requests.Session()
    session.headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',

    }

    @work_logger()  # 为了记录程序的运行状况 我们还需要有日志
    def send_request(self, *args,**kwargs) -> requests.Response:
        """
        在功能程序中调用自己封装好的send_request请求方法会传入许多不同的参数  所以我们用两个不定长进行接收
        发送请求
        :param url: 请求地址
        :return: 请求的响应对象
        timeout=6 表示响应超过6秒就报超时错误
        """
        res = self.session.get(*args,**kwargs)
        if res.status_code // 100 != 2:
            raise TimeoutError('响应状态码异常{res.status_code}:{res.text}')
        return res

    @work_logger()  # 为了记录程序的运行状况 我们还需要有日志
    def send_request_post(self, *args, **kwargs) -> requests.Response:
        """
        在功能程序中调用自己封装好的send_request请求方法会传入许多不同的参数  所以我们用两个不定长进行接收
        发送请求
        :param url: 请求地址
        :return: 请求的响应对象
        timeout=6 表示响应超过6秒就报超时错误
        """
        res = self.session.post(*args, **kwargs)
        if res.status_code // 100 != 2:
            raise TimeoutError('响应状态码异常{res.status_code}:{res.text}')
        return res